/***********************************************************************************
 * 文件名： swsd.h
 * 版本： 2
 * 说明：
 * 		SWSD(Switching signal detecter 开关信号检测器)，检测开关信号，提供触发（有效电平）
 *  、释放（无效电平）事件通知。其特点是触发事件尽可能的及时响应，可配置释放消抖,那么频繁的跳
 *  变将会认为一直处于触发状态。
 *      在配置文件中进行配置，针对POLSYS_LITE，需要间隔10ms调用 SWSD_Loop ，针对POLSYS，需
 *  要调用一次SWSD_Init()初始化本组件即可。在需要接收事件的地方定义 SWSD_Event(swsd_ev_t e)。
 *      如果启用了中断触发，需要配置好管脚中断，在中断函数中调用 SWSD_EvTrig。
 * 修改记录：
 * 	2021/05/06: 初版。 刘言。
 *  2021/07/01: 增加对POLSYS的支持。
***********************************************************************************/
#ifndef _SWSD_H_
#define _SWSD_H_

#include "..\..\polsys.h"
#ifdef __NO_INCLUDE_PATH
#include "..\..\..\projects\prj\App\swsd_config.h"
#else
#include "swsd_config.h"
#endif


// SWSD事件定义
typedef enum _swsd_ev
{
    SWSD_EV_NULL,
    SWSD_EV_TRIG,   // 触发。有效信号已到来，在中断中通知。
    SWSD_EV_FREE,   // 释放。已回到无效信号。
    SWSD_EV_END
}swsd_ev_t;

typedef void (*swsd_cb_t)(swsd_ev_t ev_code);


// 仅为了伪函数优化曝光以下属性

extern bit _SWSD_mTriggered;


//APIs

// 获取触发状态
#define SWSD_GetTriggered()      _SWSD_mTriggered

// 外部事件，这些函数由外部模块调用，用来通知本模块事件发生了

#ifdef _SWSD_USE_INT_TRIG
// 有效电平跳变发生了，一般在管脚中断中调用。
void SWSD_EvTrig();
#endif

#ifdef POLSYS_LITE
// 请间隔10ms调用一次
// 任务函数，这个函数必须按照要求定时调用（看作是线程入口）
void SWSD_Loop();

#define SWSD_Init()     
#else
// 初始化
void SWSD_Init();
#endif

#ifdef _SWSD_USE_SET_CB
void SWSD_SetCb(swsd_cb_t cb);
#endif

#endif
